[Amazon Connect] 転送先をローテーションする
1 はじめに
CX事業本部の平内(SIN)です。
Amazon Connect(以下、Connect)には、電話への転送機能があります。この機能では、タイムアウトを設定して、電話に出なかった場合の処理も設定することが可能です。
今回は、Connectを会社の代表電話に利用する場面を捉え、この機能を利用して、転送先の拠点で電話対応ができない時に、次の拠点に転送するという仕組みを試してみました。
電話を掛けた側には、転送が廻されても分かりませんので、大きく顧客体験が損なわれる事は無いと思います。
また、拠点ごと、時期によって電話対応できない時間帯などが、予め分かっている場合は、S3上の設定ファイル(RotationalTransfer.txt)を編集することで、転送の優先順位を変えたり、定期的に再生するメッセージが編集できるようにしてみました。
2 セットアップ
プロジェクトは、SAM(Lambda,S3)で作成しました。このプロジェクトを設置する手順は以下のとおりです。
(1) ダウンロード
GitHubからプロジェクトをcloneして下さい。
$ git clone https://github.com/furuya02/AmazonConnect-Extended-RotationalTransfer3.git $ cd AmazonConnect-Extended-RotationalTransfer3
事後の作業は、全てappの中で行います。
$ cd app
(2) 外部モジュールのダウンロード
[app]$ cd src;yarn install;cd .. [app]$ cd dst;yarn install;cd .. [app]$ chmod 755 .vscode/deploy.sh
本プロジェクトは、VSCode上で作業すると、快適に作業できるようセットアップされています。
[app]$ code . ( <= ドットを忘れないように)
(3) 構成
プロジェクトのファイル構成は、概ね以下のとおりです。
├── README.md ├── images (ドキュメント用画像) ├── sample │ ├── RotationalTransfer.txt (設定のサンプル) │ └── RotationalTransfer(問い合わせフローのサンプル) └── app ├── dst (js出力) │ ├── yarn.lock (デプロイ用) │ ├── package.json (デプロイ用) │ └── node_modules(デプロイ用) ├── src (tsソースコード) │ ├── yarn.lock (TS用) │ ├── package.json (TS用) │ ├── node_modules(TS用) │ ├── tsconfig.json (TypeScript設定) │ └── index.ts └── template.yml (AWS SAM テンプレート)
(4) コンパイル
tscでコンパイルして、jsファイルを生成します。 app/tsconfig.jsonに設定ファイルがあり、これを元にコンパイルすることで、dst/配下にjsファイルが出力されます。
[app]$ tsc --build src/tsconfig.json
VSCodeでは、Shift+Cmd+b(ビルドタスクの実行)で表示される選択から、tsc:ウォッチ(常時動作)若しくは、tsc:ビルド(1回のみ) でコンパイルできます。
(5) デプロイ
sam package及び、sam deployコマンドでデプロイします。 SAMによるパッケージ作成のために、予め、S3のバケットが必要です。
[app]$ export Profile=プロファイル名 [app]$ export BucketName=S3バケット名 [app]$ export StackName=Connect-Extended-Operation-Of-Tiime [app]$ sam package --output-template-file packaged.yaml --s3-bucket ${BucketName} --p ${Profile} [app]$ sam deploy --template-file packaged.yaml --stack-name ${StackName} --capabilities CAPABILITY_IAM --p ${Profile}
VSCode上でデプロイするには、Cmd+d(カスタム:タスク実行)で表示される選択から、deployタスクを選択します。
deployタスクは、.vscode/task.jsonで下記のように、.vscode/deploy.shを実行するように設定されています。
{ "version": "2.0.0", "tasks": [ { "label": "deploy", "type": "shell", "command": ".vscode/deploy.sh", "problemMatcher": [] } ] }
バケット名などパラメータの変更は、.vscode/deploy.shの環境変数を編集して下さい。
export Profile=プロファイル名 export BucketName=バケット名 #--------------- SAM更新 --------------------------- export StackName=Connect-Extended-RotationalTransfer sam package --output-template-file packaged.yaml --s3-bucket ${BucketName} --p ${Profile} sam deploy --template-file packaged.yaml --stack-name ${StackName} --capabilities CAPABILITY_IAM --p ${Profile}
(6) リソース
デプロイされるリソースは、以下の3つです。すべてのリソースは、スタック名で始まります。
- S3バケット(設定ファイルのアップロード用)
- Lambda関数
- Lambda用のRole
(7) 設定ファイル
設定ファイルをS3バケットにアップロードします 。
バケットは、CloudFormationの出力に表示されているバケット名になります。
[app]$ export Profile=プロファイル名 [app]$ export BucketName=バケット名 [app]$ aws s3 cp ../sample/RotationalTransfer.txt s3://${BucketName}/ --profile=${Profile}
(8) 設置
本プロジェクトを設置する手順は、以下のとおりです。
- インスタンスへのLambdaの追加
- 問い合わせフローの設置
- AWS Lambda関数を呼び出すブロックの設定
インスタンスへのLambdaの追加
- インスタンスの設定で、AWS Lambda関数を追加します。関数名は、CloudFormationの出力で確認して下さい。
問い合わせフローの設置
問い合わせフローのサンプル(sample/Sample)をインポートします。
AWS Lambda関数を呼び出すブロックの設定
- AWS Lambda関数を呼び出すブロックのオプションで、関数を選択します。
パラメーターは、属性を使用するに設定し、外部:counterをcounterで渡すように設定します。これにより、ループの何回目の処理かをLambdaで判断できるようになります。
3 設定
設定要領は、拠点の電話番号と、ローテーションの設定の2種類です。
(1) 拠点の電話番号
[TELNO]と[/TELNO]の間で設定し、2カラム目に電話番号を記載します。
ローテーションで使用するのは、何行目の拠点を使用するかだけですので、1カラム目は、記述方法に制約はありません。
##################################### # 拠点電話番号設定 ##################################### [TELNO] (0)SAPPORO,+819011111111 (1)OOSAK,+819022222222 (2)TOKYO,+819033333333 (3)YOKOHAMA,+819044444444 (4)SAITAMA,+819055555555 [/TELNO]
(2) ローテーションの設定
ローテーション設定は、[DEFAULT]と、その上書き設定となります。
- 1カラム目:拠点
- 2カラム目:タイムアウト(秒)
- 3カラム目:転送の前にアナウンスを入れる
下記の例では、 1. 拠点0に転送し、15秒でタイムアウト 2. 拠点2に転送し、15秒でタイムアウト 3. 「申し訳ございません・・・」のアナウンス後に、拠点4に転送し、15秒でタイムアウト この動作を、電話にでるまでループします。
##################################### # デフォルト設定 ##################################### [DEFAULT] 0,15, 2,15, 4,15,申し訳ございません。只今、混み合っております、そのまま、お待ち頂くか、おかけ直し下さい。 [/DEFAULT]
ローテーションの設定は、特定の日時だけ[DEFAULT]の設定を上書きできます。
下記の設定は、月曜日の09:00〜12:00の間だけ、デフォルトのローテーションを上書きします。
##################################### # 月曜の9:00-12:00の設定 ##################################### [SET]月,0900,1200 3,15, 2,15, 1,15,申し訳ございません。只今、混み合っております、そのまま、お待ち頂くか、おかけ直し下さい。 [/SET]
なお、空行や、#以降(コメント)は、無視されます。
RotationalTransfer.txt の一例です。
##################################### # 拠点電話番号設定 ##################################### [TELNO] (0)SAPPORO,+810011111111 (1)OOSAK,+810022222222 (2)TOKYO,+810033333333 (3)YOKOHAMA,+810044444444 [/TELNO] ##################################### # デフォルト設定 ##################################### [DEFAULT] 0,15, 1,15, 2,15, 3,15, 4,15,申し訳ございません。只今、混み合っております、そのまま、お待ち頂くか、おかけ直し下さい。 [/DEFAULT] ##################################### # 月曜の9:00-12:00の設定 ##################################### [SET]月,0900,1200 3,15, 1,15,申し訳ございません。只今、混み合っております、そのまま、お待ち頂くか、おかけ直し下さい。 [/SET]
4 最後に
今回は、電話転送を設定ファイルでローテーションするものを作成してみました。
Connectを会社の代表電話などで利用する場合、このような、複数電話にうまくスケージュールする仕組みは、もしかすると有効かも知れません。